草庐IT

Android PlusOneButton 不初始化

全部标签

c++ - 根据模板参数生成不同大小的初始化列表

我有一个包含对象数组T的类,但没有默认构造函数。这是一个例子:#includestructParam{intx;};structA{A(constParam&p){std::coutstructArray{Tdata[n];/*ntimes*/Array(constParam&p):data{/*T(p),...,T(p)*/}{}};intmain(){Paramp{42};Arrayarr(p);return0;}我正在寻找一种方法来初始化data字段,该字段使用大小不一的元素T(p)初始化列表,其中正好包含n元素。感觉可以通过std::make_index_sequence这样的

c++ - 你能初始化 unique_ptr 的 "static const vectors"吗? (C++17 与 GCC 7.3)

我正在尝试创建一个staticconst默认对象(规则)的列表太大而不能经常复制,因此我想将它们存储在vector中的unique_ptr.我注意到类似的问题已经进行了几次,但我不清楚这是否真的可行(我倾向于不可行)。即你不能使用initializer_list与unique_ptr因为对成员的访问是const导致复制操作。您不能通过引用传递临时变量,从而导致复制操作。因此两者:staticconststd::vector>kStrings={std::unique_ptr(newstd::string("String1")),std::unique_ptr(newstd::strin

c++ - 复制初始化: why move or copy constructor was not called even if copy-elision is turned off?

我的问题不同,因为我可能“知道”复制省略。我正在学习复制初始化。但是,以下代码让我感到困惑,因为我已经使用-fno-elide-contructors-O0选项关闭了复制省略。#includeusingnamespacestd;classtest{public:test(inta_,intb_):a{a_},b{b_}{}test(consttest&other){cout我首先使用命令构建:g++-std=c++11-fno-elide-constructors-O0main.cpp-omain得到如下结果:**showelideconstructors**moveconstruct

c++ - 用空花括号初始化

第一次尝试,一切正常:classBase{public:Base(){std::cout另一种实现方式(添加explicit):classBase{public:explicitBase(){std::cout我在cppreference上读到,在这两种情况下都将使用默认初始化并且没有区别。从列表初始化:Otherwise,Ifthebraced-init-listisemptyandTisaclasstypewithadefaultconstructor,value-initializationisperformed.从值初始化:ifTisaclasstypewithnodefaul

c++ - 带谓词的 std::map 与初始化列表

我有一个std::map使用自定义谓词:structPredIgnoreCase{booloperator()(conststd::string&str1,conststd::string&str2)const{std::stringstr1NoCase(str1),str2NoCase(str2);std::transform(str1.begin(),str1.end(),str1NoCase.begin(),tolower);std::transform(str2.begin(),str2.end(),str2NoCase.begin(),tolower);return(str1

c++ - 数据成员线程和互斥体的初始化。错误的顺序是否有未定义的行为?

我偶然发现了一种我认为是在不知不觉中搬起石头砸自己脚的非常简单的方法。先介绍一下数据成员的初始化顺序就是数据成员声明的顺序。所以这是非法的:structA{std::size_ti_;std::size_tlength_;A(std::size_tlength):i_{length_}//UBhere.`length_`isuninitializedlength_{length}{}};因为数据成员length_在i_的初始化器中使用时是未初始化的。幸运的是,gcc和clang都对此给出了很好的警告。简单的解决方案是从参数初始化每个数据成员,即i_{length}。现在进入正题但是当它

c++ - 在模板类中初始化类型为 'T &' 的静态成员的正确方法是什么?

我正在玩弄一个渴望初始化的通用单例类。这个想法是你像这样从类中公开继承:classfoo:publicsingleton{};我在这个过程中学到了很多东西,但我现在卡住了,因为它破坏了我的VisualStudio2008链接器。问题在于静态实例成员和/或其初始化。templateclasssingleton{singleton();singleton(singletonconst&);singleton&operator=(singletonconst&);public:staticT&instance;};templateT&T::instance;任何见解将不胜感激!编辑:有了这个

c++ - 具有类成员的结构的静态初始化

我有一个用大量普通char*指针定义的结构,还有一个对象成员。当我尝试静态初始化这样的结构时,出现编译器错误。typedefstruct{constchar*pszA;//...snip...constchar*pszZ;SomeObjectobj;}example_struct;//Ionlywanttoassignthefirstfewmembers,therestshouldbedefaultexample_structex={"a","b"};SomeObject有一个没有参数的公共(public)默认构造函数,所以我认为这不是问题。但是当我尝试编译它(使用VS)时,出现以下错

c++ - 静态字段初始化的模板部分特化

我正在尝试以下操作:structMyType{};templatestructTest{staticconstMyType*constsm_object;};templatestructTest{staticconstMyType*constsm_object;};templateconstMyType*constTest::sm_object=newMyType();templateconstMyType*constTest::sm_object=newMyType();我将其包含在2个文件中-a.cpp和b.cpp。我尝试编译并得到:errorC2998:'constMyType*

C++:静态初始化一个数组成员,一次成员

我现在可以在全局范围内执行此操作并且一切正常:constchar*Foo::bars[3]={"a","b","c"};但我想这样做是因为这样更清晰和self记录(特别是如果您使用枚举作为索引):constchar*Foo::bars[3];bars[0]="a";bars[1]="b";bars[2]="c";有可能吗?我知道我可以在一个函数(例如,类的构造函数)中执行此操作,但是如果在程序开始时未调用构造函数并且我想使用静态数组怎么办?这会导致问题。 最佳答案 这个怎么样?constchar*Foo::bars[3]={/*In